package com.coursehub.exercise.repository;

import com.coursehub.exercise.entity.Exercise;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.Query;
import org.springframework.data.repository.query.Param;
import org.springframework.stereotype.Repository;

import java.time.LocalDateTime;
import java.util.List;

@Repository
public interface ExerciseRepository extends JpaRepository<Exercise, Long> {
    
    // 根据课程ID查找作业
    List<Exercise> findByCourseId(Long courseId);
    
    // 根据班级ID查找作业
    List<Exercise> findByClassId(Long classId);
    
    // 根据教师ID查找作业
    List<Exercise> findByTeacherId(Long teacherId);
    
    // 根据作业类型查找作业
    List<Exercise> findByType(Exercise.ExerciseType type);
    
    // 根据课程ID和作业类型查找作业
    List<Exercise> findByCourseIdAndType(Long courseId, Exercise.ExerciseType type);
    
    // 根据班级ID和作业类型查找作业
    List<Exercise> findByClassIdAndType(Long classId, Exercise.ExerciseType type);
    
    // 查找即将到期的作业
    @Query("SELECT e FROM Exercise e WHERE e.dueDate BETWEEN :startDate AND :endDate")
    List<Exercise> findExercisesDueBetween(@Param("startDate") LocalDateTime startDate, 
                                          @Param("endDate") LocalDateTime endDate);
    
    // 查找已过期的作业
    @Query("SELECT e FROM Exercise e WHERE e.dueDate < :currentDate")
    List<Exercise> findOverdueExercises(@Param("currentDate") LocalDateTime currentDate);
    
    // 根据标题搜索作业
    @Query("SELECT e FROM Exercise e WHERE e.title LIKE %:title%")
    List<Exercise> findByTitleContaining(@Param("title") String title);
    
    // 统计教师创建的作业数量
    long countByTeacherId(Long teacherId);
    
    // 统计课程的作业数量
    long countByCourseId(Long courseId);
    
    // 统计班级的作业数量
    long countByClassId(Long classId);
}